Odoo Россия http://www.odoo-russia.ru ru [email protected] (http://www.odoo-russia.ru) [email protected] (http://www.odoo-russia.ru) http://www.odoo-russia.ru http://www.odoo-russia.ru Динамический домен для поля Many2one http://www.odoo-russia.ru/openerpdev/dinamicheskiy-domen-dlya-polya-many2one.html http://www.odoo-russia.ru/openerpdev/dinamicheskiy-domen-dlya-polya-many2one.html tonygreen778
В Odoo 8 есть сущность «Договор», в которой
1. Указан «Поставщик» — ссылка на сущность «Партнер»
2. Есть поле «Ответственный со стороны поставщика» — ссылка на сущность «Контакт»

«Партнер» и «Контакт» связаны Many2Many

Нужно, чтобы в поле «Ответственный со стороны поставщика», в лукапе показывались только те контакты, которые связаны с указанным поставщиком.

Пробовал писать в модели сущности «Договор»:

	@api.onchange('vendor_id')
	def onchange_vendor(self):
		res = {}
		if self.vendor_id:
			vendor_contact_ids = self.vendor_id.contact_ids.mapped('id')
			res['domain'] = {'vendcontact_id': [('id', 'in', vendor_contact_ids)]}
		else:
			res['domain'] = {'vendcontact_id': [('id', 'in', [])]

		return res

Этот метод срабатывает только при создании нового договора или при изменении поля «Поставщик». Как быть в случае, когда форма уже существующего договора открывается на редактирование, но пользователь не трогает поле «Поставщик»?]]>
Mon, 29 Feb 2016 11:20:41 +0300 Установка домена для поля many2one
Установка домена для поля many2one http://www.odoo-russia.ru/openerpdev/ustanovka-domena-dlya-polya-many2one.html http://www.odoo-russia.ru/openerpdev/ustanovka-domena-dlya-polya-many2one.html sf0101 Есть два поля-списка: «Партнёры» и «Телефонные номера».
«Партнёры» относятся к «Телефонные номера» как one2many (у одного Партнёра может быть n-ное количество Телефонных номеров).
Задача: необходимо, чтобы при выборе Партнёра из списка «Партнёры», в списке «Телефонные номера» отображались только телефонные номера, принадлежащие данному Партнёру. Понимаю, что это возможно выкрутить, но как именно — так и не понял.
P.S. Пока удалось сделать только обратное: при выборе Телефонного номера в списке «Телефонные номера» устанавливается домен для списка «Партнёры», код ниже:

from openerp.osv import fields, osv

class crm_phonecall(osv.osv):

    _inherit = "crm.phonecall"

    _columns = {
        'phonenumber': fields.many2one('phonenumber.phonenumber', 'Phone number', required=True, ondelete='cascade'),

    } 

# Update partner's domain. Leave the only partner that owns selected phonenumber

    def onchange_phonenumber(self, cr, uid, ids, ph_selected):
	if ph_selected > 0:
	    record=self.pool.get('phonenumber.phonenumber').browse(cr, uid, ph_selected, context=None)
	    return {'value': {'partner_id': None},'domain': {'partner_id': [('id','=',record.partner_id.id)]}}  
        return {'value': {'partner_id': None},'domain': {'partner_id':''}} 
 
crm_phonecall();
]]>
Thu, 30 Jan 2014 10:24:16 +0400 Установка домена для поля many2one